Karakters in C#
System.Char
Gebruik
Filmpje: Karakters in C#
Een waarde van het type System.Char
stelt precies 1 karakter voor zoals: a, A, 5, [, &. In een variable van het type Char
kan je dus maar 1 karakter stoppen.
Er bestaan een heleboel verschillende karakters. Je hebt natuurlijk de letters, kleine- en hoofdletters, de cijfers. Maar er zijn ook nog andere tekens. Denk maar aan symbolen voor geld, $, €. Daarnaast zijn er talen met andere tekens dan de letters uit ons alfabet. Het moderne chinees (mandarijns) telt ongeveer 10.000 verschillende tekens. Naast het latijns alfabet, is er nog het alfabet voor het arabisch en het hebreeuws. Alles tesamen zijn dat een hoop verschillende tekens.
Vandaar dat het type System.Char
65.535 verschillende tekens kan bevatten. En dat is genoeg om alle tekens van alle talen over heel de wereld mee voor te stellen. Je kan de beneden- en bovengrens van het aantal karakters dat het type System.Char
kan voorstellen opvragen met behulp van twee methoden in de structure System.Char
. De structure heeft twee velden van het type constant MinValue
, gedefinieerd al \0 en MaxValue
gedefinieerd als \uFFFF.
Deze set van karakters, 65.535 in het totaal, wordt de Unicode standaardset genoemd. Op Wikipedia kan je er meer over lezen.
Een paar voorbeelden:
ASCII leestekens en symbolen |
||
U+003A |
: |
Dubbelpunt |
U+003B |
; |
Puntkomma |
U+003C |
< |
Kleiner dan |
U+003D |
= |
Gelijkheidsteken |
U+003E |
> |
Groter dan |
U+003F |
? |
Vraateken |
U+0040 |
@ |
Apestaart |
Hoofdletters latijns alfabet |
||
U+0041 |
A |
Latin Capital letter A |
U+0042 |
B |
Latin Capital letter B |
U+0043 |
C |
Latin Capital letter C |
U+0044 |
D |
Latin Capital letter D |
U+0045 |
E |
Latin Capital letter E |
Er bestaan verschillende soorten karakters. Soms is het nodig te weten tot welke soort een bepaald karakter behoort. Is het een letter, of een cijfer of een geldsymbool, enz. Om dat te weten te komen kan je de static GetUnicodeCategory
oproepen. Die methode retourneert een waarde van het System.Globalisation.UnicodeCategory opsommingtype. Die waarde geeft aan als het karakter:
- een controlekarakter,
- een geldsymbool,
- kleine letter,
- hoofdletter,
- leesteken,
- wiskundig symbool,
- of een ander karakter is.
Die categoriën zijn door de Unicode standaard is vastgelegd.
char ch2 = '2'; string str = "Upper Case"; Console.WriteLine(Char.GetUnicodeCategory('a')); // Output: "LowercaseLetter" Console.WriteLine(Char.GetUnicodeCategory(ch2)); // Output: "DecimalDigitNumber" Console.WriteLine(Char.GetUnicodeCategory(str, 6)); // Output: "UppercaseLetter"
De structure Char bevat static methoden om die taak te vergemakkelijken. De meeste methoden roepen intern de GetUniCodeCategory op en retourneren false of true.
IsDigit, IsLetter, IsWhiteSpace, IsUpper, IsLower, IsPunctuation, IsLetterOrDigit, IsControl, IsNumber, IsSeparator, IsSurrogate, IsLowSurrogate, IsHighSurrogate, IsSymbol, retourneert welk soort karakter er in Char zit.
Je kan een karakter van kleine letter naar hoofdletter omzetten zonder rekening te houden met de ingestelde cultuur op de lokale computer met ToLowerInvariant of ToUpperInvariant. Als je ToLower of ToUpper gebruikt wordt er rekening gehouden met de cultuur informatie door de static CurrentCulture eigenschap op te roepen van de System.Threading.Tread. Je kan zelf een bepaalde cultuur specificeren door een instantie van CultureInfo klasse aan die methoden mee te geven. Voor de Fransen bijvoorbeeld is é in hoofdletter É.
De ToString methode retourneert een string die uit één karakter bestaat. Parse en TryParse daarentegen nemen een string, die uit één karakter bestaat, aan en retourneren een UTF-16 code point.
char chA = 'A'; char ch1 = '1'; string str = "test string"; Console.WriteLine(chA.CompareTo('B')); // Output: "-1" (meaning 'A' is 1 less than 'B') Console.WriteLine(chA.Equals('A')); // Output: "True" Console.WriteLine(Char.GetNumericValue(ch1)); // Output: "1" Console.WriteLine(Char.IsControl('\t')); // Output: "True" Console.WriteLine(Char.IsDigit(ch1)); // Output: "True" Console.WriteLine(Char.IsLetter(',')); // Output: "False" Console.WriteLine(Char.IsLower('u')); // Output: "True" Console.WriteLine(Char.IsNumber(ch1)); // Output: "True" Console.WriteLine(Char.IsPunctuation('.')); // Output: "True" Console.WriteLine(Char.IsSeparator(str, 4)); // Output: "True" Console.WriteLine(Char.IsSymbol(' ')); // Output: "True" Console.WriteLine(Char.IsWhiteSpace(str, 4)); // Output: "True" Console.WriteLine(Char.Parse("S")); // Output: "S" Console.WriteLine(Char.ToLower('M')); // Output: "m" Console.WriteLine('x'.ToString()); // Output: "x"
Let erop dat de methode static is. Dit wil zeggen dat we geen instantie of een object moeten aanmaken van de klasse alvorens de methode te gebruiken.
Oefening
- Hoe je de oefening maakt zie je in het filmpje: Karakters in C# Oefening.
- Probeer de code hierboven uit in een static methode met de naam
CharLerenGebruiken
in de klasse met de naamWerkenMetGegevens
in de namespace met de naamLerenWerkenMetCSharp
. - Test deze methode in de
Main
methode in Program.cs. - Maak een methode met de naam
ShowAllAsciiValues
in de klasseWerkenMetGegevens
, die je kan aanroepen zonder eerst een instantie te moeten creëren, die alle afdrukbare ASCII waarden (8-bit versie) in de console- Hou er rekening mee dat sommige ASCII tekens niet afdrukbaar zijn omdat ze het afdrukken beïnvloeden. ASCII 9 is bijvoorbeeld het tabteken en genereert dus een tab. Als het ASCII teken niet afdrukbaar is vermeld je dat het een control character is (zie afbeelding hieronder).
- Om een ASCII waarde (int) om te zetten naar char gebruik je een cast:
(char)(i)
- Om een gecaste char om te zetten naar een string kan je gebruik maken van de ronde haakjes:
((char)(i)).ToString()